package com.tsmti.activiti.dao;

import com.tsmti.activiti.dto.ActUserDto;
import com.tsmti.activiti.dto.ProcessTaskDto;
import com.tsmti.activiti.entity.ExtendActModel;
import com.tsmti.core.common.dao.BaseDao;
import com.tsmti.core.common.query.data.Queryable;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


/**
 * @Package：com.tsmti.activiti.dao
 * @Class：ActExtendDao
 * @Description： 对activiti的表写sql查询，不通过api查询
 * @Author：zcw
 * @Date：Created in 2018/8/16 10:45
 * @Company:
 * @Version：
 * @Modified By:
 *
 */
public interface ActExtendDao extends BaseDao {
    /**
     * 根据流程key 获取业务可用的流程
     * @param actKey
     * @return
     */
    List<Map<String,Object>> queryFlowsByActKey(String actKey);

    /**
     * 根据节点id分页查询可以选择的审批人
     * @param params key:nodeId 节点id,key:userName 用户姓名 用于模糊查询
     * @param page  页码
     * @param rows  页数
     * @return
     */
    List<ActUserDto> userWindowPage(Map<String, Object> params, int page, int rows);

    /**
     * 转办变更人选择
     * @param params key:userName 用户姓名 用于模糊查询
     * @param page 页码
     * @param rows 页数
     * @return
     */
    List<ActUserDto> turnWindowList(Map<String, Object> params, int page, int rows);

    /**
     * 流程根据业务id查询业务信息
     * @param params key:busId 业务id key:tableName 表名 key:pkName 业务主键
     * @return
     */
    Map<String,Object> queryBusiByBusId(Map<String, Object> params);

    /**
     * 更新当前操作流程的业务表信息
     * @param params
     * @return
     */
    int updateBusInfo(Map<String,Object> params);

    /***
     * 获取待办记录数
     * @param params
     * @return
     */
    long findMyUpcomingPageCount(Map<String,Object> params);
    /***
     * 获取已办记录数
     * @param params
     * @return
     */
    long findMyDonePageCount(Map<String, Object> params);
    /**
     * 我的待办列表
     * @param params    查询条件
     * @param page      页码
     * @param rows      页数
     * @return
     */
    List<ProcessTaskDto> findMyUpcomingPage(Map<String,Object> params,int page, int rows);

    /**
     * 我的已办列表
     * @param params 查询条件
     * @param page   页码
     * @param rows   页数
     * @return 我的已办列表
     */
    List<ProcessTaskDto> findMyDoneList(Map<String, Object> params,int page, int rows);

    /**
     * 更新当前操作流程的业务表在审批过程中可更改的信息
     * @param params 查询条件
     * @return 更新当前操作流程的业务表在审批过程中可更改的信息
     */
    int updateChangeBusInfo(Map<String, Object> params);

    /**
     * 流程办理人
     * @param params 查询条件
     * @param queryable 查询条件
     * @return 流程办理人
     */
    long countActUser(Map<String, Object> params, Queryable queryable);
    /**
     * 流程办理人
     * @param params 查询条件
     * @param queryable 查询条件
     * @return 流程办理人
     */
    List<ActUserDto> findActUser(Map<String, Object> params, Queryable queryable);


    /**
     * 根据模型id获取流程模型和业务相关信息
     * @param modelId 模型id
     * @return 根据模型id获取流程模型和业务相关信息
     */
    ExtendActModel getModelAndBusInfo(String modelId);

    /**
     * 根据流程id获取流程模型和业务相关信息
     * @param workflowId 流程id
     * @return 根据流程id获取流程模型和业务相关信息
     */
    ExtendActModel getModelAndBusInfoByWorkflowId(String workflowId);
}
